1、字符串的排序
思想：dfs，但是有一点需要注意，就是重复的字符情况，所以先要进行排序，然后如果前后字符一样，得判断一下之前得字符是否已经用过。
class Solution {
public:
    void dfs(string& str,vector<string>& v,string& s,vector<int>& book,int cur,int n)
    {
        if(cur==n)
        {
            v.push_back(s);
            return;
        }
        //开始从头遍历未使用过的字符 
        for(int i=0;i<str.size();i++)
        {
            //如果当前位置已经访问过，或者当前位置字符等于前一个，并且前一个已经访问过
            if(book[i]||(i>0&&str[i-1]==str[i]&&book[i-1]))
                continue;
            if(book[i]==0)
            {
                book[i]=1;
                s.push_back(str[i]);
                dfs(str,v,s,book,cur+1,str.size());
                //回溯
                s.pop_back();
                book[i]=0;
            }
            
        }
    }
    vector<string> Permutation(string str) {
        vector<string> v;
        string s;
        sort(str.begin(),str.end());
        vector<int> book(str.size(),0);
        dfs(str,v,s,book,0,str.size());
        return v;
    }
};